﻿#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <stdlib.h>
#include "bigint.h"
#include "operate.h"
#include "menu.h"

/*
检查字符串是否只包含数字字符：
如果你的大整数是以字符串的形式输入的，
你可以使用库函数（如 isdigit）来检查字符串中是否只包含数字字符。
确保字符串不包含任何非数字字符或其他无效字符。

检查符号：
如果你的大整数具有符号（正数或负数），
确保符号位正确，并进行必要的处理以确保符号的正确性。

检查位数：
检查大整数的位数是否在有效范围内，
不要包含不必要的前导零。你可以删除前导零，确保大整数的位数正确。

处理溢出：
如果你使用固定的位数来表示大整数，
确保不会发生溢出。如果大整数的运算可能导致溢出，你需要考虑如何处理这种情况，例如截断或抛出错误。

考虑进制：
如果你的大整数不是以十进制表示，
而是以其他进制（如十六进制）表示，确保输入和操作与指定的进制一致。

错误处理：
在你的代码中实现适当的错误处理机制，以处理不合法的输入数据。
这可以包括返回错误代码、抛出异常或向用户显示错误消息。
*/



int main()
{
	INPUT_INFO info;
	pINPUT_INFO p_info = &info;

	// 这里要传指针，如果传结构体，那么内部修改无法反馈给参数
	show_menu(p_info);

	// 创建创建两个大数并初始化
	pBIGINT num1 = initBIGINT(p_info->operate_num1);
	pBIGINT num2 = initBIGINT(p_info->operate_num2);
	BIGINT result;
	// 重新创建一个指针操作，是为了让函数内部的操作会影响到外面的数据
	// 如果传递&result相当于把数据传过去了。不会影响外面
	pBIGINT ptr_result = &result;

	

	switch (p_info->operate_type)
	{
	case '1':
		BigIntAdd(num1, num2, ptr_result);
		break;
	case '2':
		printf("这个减法还没做！\n");
		break;	
	case '3':
		printf("这个除法还没做！\n");
		break;
	case '4':
		printf("这个乘法还没做！\n");
		break;

	default:
		printf("再见！\n");
		break;
	}

	// 打印结果
	printf("最终结果是:\n ");
	if (ptr_result->sign == -1)
	{
		printf("-");
	}
	printf("%s", ptr_result->num);


	// 释放内存
	freeBIGINT(num1);
	freeBIGINT(num2);
	free(ptr_result->num);


};










